В предыдущих практикумах мы работали над установкой и настройкой ClickHouse ноды, но как отслеживать её состояние и работоспособность? По факту мы научились только сохранять серверные логи, а так же профилировать и трейсить сами запросы. Но нам точно необходимо видеть основные метрики в графане для отслеживания состояния сервера.
И для этого ClickHouse поддерживает сбор метрик о том, как сервер использует вычислительные ресурсы, общую статистику обработки запросов, а также имеет настройки для интеграцией с такими системами мониторинга, как Prometheus или Graphite.
ClickHouse хранит свои метрики в системных таблицах, которые и будут использоваться системами мониторинга. Их можно посмотреть в следующих системных таблицах:
system.metrics — отвечает за актуальные метрики, которые имеют текущее значение или могут быть рассчитаны мгновенно.
ch1 :) SELECT * FROM system.metrics LIMIT 5;
SELECT *
FROM system.metrics
LIMIT 5
Пример:
┌─metric──────────┬─value─┬─description─────────────────────────────────────┐
│ Query │ 1 │ Number of executing queries │
│ Merge │ 0 │ Number of executing background merges │
│ PartMutation │ 0 │ Number of mutations (ALTER DELETE/UPDATE) │
│ ReplicatedFetch │ 0 │ Number of data parts being fetched from replica │
│ ReplicatedSend │ 0 │ Number of data parts being sent to replicas │
└─────────────────┴───────┴─────────────────────────────────────────────────┘
5 rows in set. Elapsed: 0.003 sec.
system.events — содержит информацию о количестве событий, произошедших в системе.
Пример:
ch1 :) SELECT * FROM system.events LIMIT 5;
SELECT *
FROM system.events
LIMIT 5
┌─event───────────────────────┬───value─┬─description──────────────────────────────────────┐
│ SelectQuery │ 65 │ Same as Query, but only for SELECT queries. │
│ FailedQuery │ 1 │ Number of failed queries. │
│ QueryTimeMicroseconds │ 388037 │ Total time of all queries. │
│ SelectQueryTimeMicroseconds │ 106115 │ Total time of SELECT queries. │
│ FileOpen │ 2570879 │ Number of files opened. │
│ Seek │ 597120 │ Number of times the 'lseek' function was called. │
└─────────────────────────────┴─────────┴──────────────────────────────────────────────────┘
5 rows in set. Elapsed: 0.004 sec.
system.asynchronous_metrics — содержит метрики, которые обновляются и вычисляются в фоновом режиме раз в минуту.
Пример:
ch1 :) SELECT * FROM system.asynchronous_metrics LIMIT 5;
SELECT *
FROM system.asynchronous_metrics
LIMIT 5
┌─metric───────────────────────────────────┬────value─┐
│ CPUFrequencyMHz_0 │ 1799.998 │
│ jemalloc.arenas.all.pmuzzy │ 4273 │
│ jemalloc.arenas.all.pdirty │ 931 │
│ jemalloc.background_thread.run_intervals │ 0 │
│ jemalloc.background_thread.num_runs │ 0 │
└──────────────────────────────────────────┴──────────┘
5 rows in set. Elapsed: 0.003 sec.
Кстати, настраиваются они в стандартом конфигурационном файле сервера и имеют следующий вид:
<!-- Metric log contains rows with current values of ProfileEvents, CurrentMetrics collected with "collect_interval_milliseconds" interval. -->
<metric_log>
<database>system</database>
<table>metric_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
<collect_interval_milliseconds>1000</collect_interval_milliseconds>
</metric_log>
<!--
Asynchronous metric log contains values of metrics from
system.asynchronous_metrics.
-->
<asynchronous_metric_log>
<database>system</database>
<table>asynchronous_metric_log</table>
<!--
Asynchronous metrics are updated once a minute, so there is
no need to flush more often.
-->
<flush_interval_milliseconds>60000</flush_interval_milliseconds>
</asynchronous_metric_log>
Здесь так же указывается база и таблица, в которую необходимо записывать все серверные метрики.
ClickHouse поддерживает экспорт метрик в такие системы мониторинга, как Graphite и Prometheus. В их параметрах флагами true/false можно задать метрики для экспорта:
<yandex>
<graphite>
<host>localhost</host>
<port>42000</port>
<timeout>0.1</timeout>
<interval>1</interval>
<root_path>one_sec</root_path>
<metrics>true</metrics>
<events>true</events>
<events_cumulative>false</events_cumulative>
<asynchronous_metrics>false</asynchronous_metrics>
</graphite>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>
</yandex>
В настройках Graphite:
host/port — хост и порт сервера Graphite;timeout — тайм-аут отправки метрик в секундах;interval — период отправки метрик в секундах;root_path — префикс для ключей.В настройках Prometheus:
endpoint — путь, по которому будет идти экспорт метрик по HTTP-протоколу. Должен начинаться с /.port - порт, по которому будет доступен endpoint.На саммом деле для их включения всего лишь достаточно раскомментировать соответствующую секцию в конфигурационном файле - все настройки по умолчанию вполне валидны для продакшен среды.
Как мы уже обсуждали ранее - можно проверить доступность ClickHouse сервера отправив ему GET запрос /ping на HTTP API. Если сервер доступен - он ответит 200 OK.
К сожалению, в данном практикуме мы не разбираем графану от слова совсем. Но если она у вас установлена и настроена, то вы можете найти готовые дашбоарды на grafana.net и импортировать готовый дашбоард, например такой. Схема будет выглядеть достаточно просто - включаем прометеус мониторинг в кликхаусе, настраиваем прометеус на сбор метрик с кликхауса и импортируем дашбоард в графану. Все! Можно наслаждаться графиками :)
config.xml сервера.9363 для Prometheus в конфигурации ClickHouse.metrics и events для сбора метрик.curl, что ClickHouse теперь отдает метрики по указанному порту и эндпоинту.